﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Riel_Gestion.dao;
using log4net;

namespace Riel_Gestion
{
    public partial class FrmAgregarCliente : Form
    {
        private static readonly ILog logger = LogManager.GetLogger(typeof(FrmAgregarCliente));
        public FrmAgregarCliente()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (datosValidos())
            {
                DTOCliente dto = new DTOCliente();

                logger.Info("Agregando cliente: " + txtCodCli.Text);

                //Logueo de datos del cliente
                logDatosFrm();

                //Mapeo de campos
                dto.CodCliente = Convert.ToInt64(this.txtCodCli.Text);
                dto.Nombre = this.txtNombre.Text;
                dto.Cuit = this.txtCuit.Text;
                dto.Iva = this.txtIva.Text;
                dto.Responsable = this.txtResp.Text;
                dto.Telefono = this.txtTel.Text;
                dto.Direccion = this.txtDir.Text;
                dto.Email = this.txtEmail.Text;
                dto.Otros = this.txtOtros.Text;

                //Guardado en memoria
                ClienteDAO.save(dto);

                FrmMain.showInfoDialog("Cliente agregado correctamente", "Agregar Cliente");
                this.Close();
            }
            else
            {
                FrmMain.showErrorDialog("No se agrego el cliente " + txtCodCli.Text + ", existen datos invalidos");
            }

            
        }

        private void logDatosFrm()
        {
            logger.Debug("Datos del cliente a insertar:");
            logger.Debug("txtCodCli  : " + this.txtCodCli.Text);
            logger.Debug("txtNombre  : " + this.txtNombre.Text);
            logger.Debug("txtCuit    : " + this.txtCuit.Text);
            logger.Debug("txtIva     : " + this.txtIva.Text);
            logger.Debug("txtResp    : " + this.txtResp.Text);
            logger.Debug("txtTel     : " + this.txtTel.Text);
            logger.Debug("txtDir     : " + this.txtDir.Text);
            logger.Debug("txtEmail   : " + this.txtEmail.Text);
            logger.Debug("txtOtros   : " + this.txtOtros.Text);
        }

        private void txtCodCli_Validating(object sender, CancelEventArgs e)
        {
            if (txtCodCli.Text == "")
            {
                errorProvider.SetError(txtCodCli, "Por favor ingrese un codigo de cliente");                
                return;
            }

            if (txtCodCli.Text.Length > 3)
            {
                errorProvider.SetError(txtCodCli, "Por favor ingrese un codigo de hasta 3 digitos");
                return;
            }

            int result;
            if (!int.TryParse(txtCodCli.Text,out result))
            {
                errorProvider.SetError(txtCodCli, "Solo se aceptan caracteres numericos");
                return;
            }

            //Si esta todo ok:
            errorProvider.SetError(txtCodCli, "");
        }

        private void txtCuit_Validating(object sender, CancelEventArgs e)
        {
            if (txtCodCli.Text != "000" && txtCodCli.Text != "0")
            {
                if (txtCuit.Text == "")
                {
                    errorProvider.SetError(txtCuit, "Por favor ingrese numero de cuit");
                    return;
                }

                if (txtCuit.Text.Length < 11)
                {
                    errorProvider.SetError(txtCuit, "Se ingresaron menos de 11 digitos!");
                    return;
                }

                if (!Utils.ValidaCuit(txtCuit.Text))
                {
                    errorProvider.SetError(txtCuit, "Numero de CUIT invalido!");
                    return;
                }

                //Si esta todo ok:
                errorProvider.SetError(txtCuit, "");
            }
        }

        bool datosValidos()
        {
            foreach (Control c in errorProvider.ContainerControl.Controls)
                if (errorProvider.GetError(c) != "")
                    return false;
            return true;
        }

    }
}
